МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра «Телекомунікації»
КЛАСИ ПАМ’ЯТІ
Методичні вказівки до лабораторної роботи з дисципліни
«Інформатика телекомунікаційних систем та мереж, ч.IІ»
для студентів базового напряму 6.0924
«Телекомунікації»
Затверджено
на засіданні кафедри «Телекомунікації»
Національного університету
«Львівська політехніка»,
протокол №___ від______2009р.
Львів 2009
МЕТА РОБОТИ: дослідити властивості змінних різних класів пам’яті. Оволодіти механізмом визначення та опису глобальних змінних.
Попередні відомості.
Специфікація класу пам’яті змінної визначає час її життя в програмі (глобальний або локальний) та область її дії. Об’єкт з глобальним часом життя існує і має значення на протязі всього часу виконання програми. Всі функції мають глобальний час життя.
Змінній з локальним часом життя виділяється нова комірка пам'яті кожен раз, коли управління передається блоку, в якому вона визначена. Коли управління повертається з блоку, змінна губить свої значення.
В мові С існуї чотири специфікації класів пам’яті:
auto
register
static
extern
Область дії функцій, декларованих із специфікаціїю класу пам'яті extern, розповсюджується на всі вихідні файли, які складають програму і такі функції можуть бути викликані з будь-якої функції в будь-якому вихідному файлі програми.
Змінні класів пам'яті auto i register мають локальний час життя. Специфікації static і extern визначають об’єкти з глобальним часом життя.
В сукупності з розташуванням декларації об’єкту специфікація класу пам'яті визначає область дії змінної або функції – частину програми, в якій до функції або змінної можливий доступ. Оголошення, розташовані зовні тіл усіх функцій, відносяться до зовнішнього рівня, а оголошення всередині тіла функції - до внутрішнього рівня.
На зовнішньому рівні використовуються тільки класи пам’яті static i extern:
static - така змінна може бути явно ініціалізована константним виразом, в противному випадку вона автоматично ініціюється нулем; область дії - від точки її визначення (вище цієї точки вона недоступна) до кінця вихідного файлу (присутність в інших вихідних файлах змінної з таким самим іменем означає зовсім іншу, незалежну від цієї, змінну);
extern - використовується для опису (декларації, оголошення) змінної, визначеної в іншому місці програми, коли потрібно розповсюдити на даний вихідний файл область дії змінної, яка визначена в іншому вихідному файлі, або розширити зону дії змінної вище її визначення.
Допускається тільки одне визначення зовнішньої змінної.
На внутрішньому рівні може бути специфікований будь-який з чотирьох класів пам’яті. За замовчуванням вважається клас пам’яті auto - це змінна з локальним часом життя, і область її дії розповсюджується на блок, в якому вона оголошена. Змінні класу
auto автоматично не ініціюються, за надання їм певного значення відповідає програміст.
Змінну класу пам’яті register компілятор розміщує якщо це можливо в регістрі мікропроцесора. Це прискорює доступ до змінної і зменшує код виконуваної програми; область дії та ж сама, що й у змінної auto; розмір об’єкту - не більший, ніж тип int; якщо компілятор не знаходить можливості розмістити змінну в регістрі, їй надається клас auto.
Змінна, оголошена на внутрішньому рівні, як static, має глобальний час життя, але її дія розповсюджується тільки на блок, в якому вона декларована; на відміну від змінних auto, змінні static зберігають свої значення після виходу з блоку. Змінні класу пам’яті static можуть бути ініціалізовані константним виразом, а якщо явної ініціалізації немає, то змінна автоматично ініціюється нулем.
Змінна, оголошена специфікацією класу пам’яті extern, є посиланням на змінну з тим самим іменем, визначену на зовнішньому рівні в будь-якому вихідному файлі програми.
Мета внутрішньої декларації extern полягає в тому, щоб зробити визначення змінної зовнішнього рівня (як правило, представлене в і...